/**
 * Volces AI API 真实调用测试脚本
 * 使用方法: node test-ai-api.js
 * 
 * 注意：此脚本会进行真实的API调用，可能产生费用
 */

import dotenv from 'dotenv';
import { correctEssay } from './src/services/correctionService.js';
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 加载.env文件
dotenv.config({ path: resolve(__dirname, '.env') });

// 测试作文样本
const testEssays = {
  primary: {
    title: '美丽的春天',
    content: `春天来了，花儿开了，小草绿了。
我和小伙伴们一起去公园玩。
公园里有很多人，大家都很开心。
我们在草地上放风筝，风筝飞得好高啊！
春天真美丽啊！我喜欢春天。`,
    gradeLevel: 'primary',
  },
  middle: {
    title: '成长的烦恼',
    content: `青春期是人生中一个特殊的阶段，充满了欢笑与泪水。
在这个阶段，我们开始独立思考，开始有自己的想法和判断。
然而，成长的道路并不总是一帆风顺的。学习的压力、人际关系的复杂、对未来的迷茫，这些都是我们必须面对的问题。
但正是这些烦恼，让我们学会了坚强，学会了成熟。
我相信，只要我们勇敢面对，终将迎来属于自己的精彩人生。`,
    gradeLevel: 'middle',
  },
  high: {
    title: '科技与人文的思考',
    content: `在科技飞速发展的今天，人工智能、大数据等技术深刻地改变着我们的生活。
然而，我们也应该思考：在追求技术进步的同时，是否忽视了人文精神的培养？
科技是工具，人文是目的。技术可以让我们的生活更加便捷，但只有人文精神才能让我们的生活更有意义。
我认为，未来的发展应该是科技与人文的有机结合，既要有技术的创新，也要有人文的关怀。
只有这样，我们才能创造一个既先进又温暖的社会。`,
    gradeLevel: 'high',
  },
};

async function testAPI(gradeLevel = 'primary') {
  const essay = testEssays[gradeLevel];
  
  console.log('\n' + '='.repeat(60));
  console.log(`\x1b[36m测试 ${gradeLevel === 'primary' ? '小学' : gradeLevel === 'middle' ? '初中' : '高中'} 作文批改\x1b[0m`);
  console.log('='.repeat(60) + '\n');
  
  console.log(`📝 作文标题: ${essay.title}`);
  console.log(`📊 学段: ${gradeLevel}`);
  console.log(`📏 字数: ${essay.content.length}字`);
  console.log(`\n作文内容:\n${'-'.repeat(40)}\n${essay.content}\n${'-'.repeat(40)}\n`);
  
  console.log('⏳ 正在调用AI批改API...\n');
  
  try {
    const startTime = Date.now();
    
    const result = await correctEssay(essay.content, essay.gradeLevel, {
      title: essay.title,
    });
    
    const endTime = Date.now();
    const duration = ((endTime - startTime) / 1000).toFixed(2);
    
    console.log('\x1b[32m✓ API调用成功！\x1b[0m\n');
    
    // 基本信息
    console.log('📈 批改结果概览:');
    console.log(`  • 总分: ${result.data.score_breakdown.total_score}分`);
    console.log(`  • 字数: ${result.data.metadata?.essay_word_count || essay.content.length}字`);
    console.log(`  • 处理时间: ${duration}秒`);
    console.log(`  • 模型: ${result.data.metadata?.model || 'deepseek-v3-1-terminus'}`);
    
    // Token使用统计
    if (result.data.usage) {
      console.log(`\n💰 Token使用统计:`);
      console.log(`  • 输入Token: ${result.data.usage.prompt_tokens}`);
      console.log(`  • 输出Token: ${result.data.usage.completion_tokens}`);
      console.log(`  • 总Token: ${result.data.usage.total_tokens}`);
    }
    
    // 评分详情
    console.log(`\n🎯 评分详情:`);
    Object.entries(result.data.score_breakdown).forEach(([key, value]) => {
      if (key !== 'total_score') {
        const label = key.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase());
        console.log(`  • ${label}: ${value}分`);
      }
    });
    
    // 批改意见
    if (result.data.corrections && result.data.corrections.length > 0) {
      console.log(`\n📝 批改意见 (${result.data.corrections.length}条):`);
      result.data.corrections.slice(0, 3).forEach((correction, index) => {
        console.log(`\n  ${index + 1}. ${correction.type || correction.category}`);
        console.log(`     位置: ${correction.position || '未指定'}`);
        console.log(`     问题: ${correction.original_text || correction.original_excerpt}`);
        console.log(`     建议: ${correction.suggested_text || correction.suggested_revision}`);
      });
      
      if (result.data.corrections.length > 3) {
        console.log(`\n  ... 还有 ${result.data.corrections.length - 3} 条批改意见`);
      }
    }
    
    // 总评
    if (result.data.encouraging_comments) {
      console.log(`\n💬 总评:`);
      console.log(`  ${result.data.encouraging_comments}`);
    } else if (result.data.strength_analysis) {
      console.log(`\n💬 优点分析:`);
      console.log(`  ${result.data.strength_analysis}`);
    }
    
    // 改进建议
    if (result.data.improvement_suggestions && result.data.improvement_suggestions.length > 0) {
      console.log(`\n💡 改进建议:`);
      result.data.improvement_suggestions.forEach((suggestion, index) => {
        if (typeof suggestion === 'string') {
          console.log(`  ${index + 1}. ${suggestion}`);
        } else if (suggestion.suggestion) {
          console.log(`  ${index + 1}. ${suggestion.suggestion}`);
        }
      });
    }
    
    console.log('\n' + '='.repeat(60));
    console.log('\x1b[32m测试完成！\x1b[0m');
    console.log('='.repeat(60) + '\n');
    
    return true;
    
  } catch (error) {
    console.error('\x1b[31m✗ API调用失败\x1b[0m\n');
    console.error(`错误类型: ${error.type || error.name || 'Unknown'}`);
    console.error(`错误信息: ${error.message}`);
    
    if (error.type === 'API_CONFIG_ERROR') {
      console.error('\n\x1b[33m提示: 请检查.env文件中的VOLCES_API_KEY配置\x1b[0m');
    } else if (error.type === 'API_AUTH_ERROR') {
      console.error('\n\x1b[33m提示: API Key可能无效或已过期\x1b[0m');
    } else if (error.type === 'API_TIMEOUT') {
      console.error('\n\x1b[33m提示: 请求超时，请检查网络连接\x1b[0m');
    }
    
    console.log();
    return false;
  }
}

// 主函数
async function main() {
  console.log('\n\x1b[1m🤖 Volces AI API 测试工具\x1b[0m');
  console.log('\x1b[90m注意: 此测试会进行真实的API调用，可能产生费用\x1b[0m\n');
  
  // 从命令行参数获取学段
  const gradeLevel = process.argv[2] || 'primary';
  
  if (!['primary', 'middle', 'high'].includes(gradeLevel)) {
    console.error('\x1b[31m错误: 无效的学段参数\x1b[0m');
    console.log('\n使用方法:');
    console.log('  node test-ai-api.js [primary|middle|high]');
    console.log('\n示例:');
    console.log('  node test-ai-api.js primary  # 测试小学作文');
    console.log('  node test-ai-api.js middle   # 测试初中作文');
    console.log('  node test-ai-api.js high     # 测试高中作文');
    console.log();
    process.exit(1);
  }
  
  const success = await testAPI(gradeLevel);
  
  if (success) {
    console.log('\x1b[32m✓ 所有测试通过！\x1b[0m\n');
    process.exit(0);
  } else {
    console.log('\x1b[31m✗ 测试失败\x1b[0m\n');
    process.exit(1);
  }
}

// 运行主函数
main().catch((error) => {
  console.error('\x1b[31m未捕获的错误:\x1b[0m', error);
  process.exit(1);
});

